


// 案例1：对比不用Promise和用Promise处理异步操作的差异


// 不使用Promise的写法（回调地狱）
function getDataCallback(callback) {//传入一个函数,当计时器结束(异步代码)的时候调用函数,并传入两个参数
    setTimeout(() => {
        const data = '数据1';
        callback(null, data);
    }, 1000);
}

function processDataCallback(data, callback) {//传入一个函数,当计时器结束(异步代码)的时候调用函数,并传入两个参数
    setTimeout(() => {
        const result = data + ' -> 处理后';
        callback(null, result);
    }, 1000);
}

// 回调地狱示例
getDataCallback((err, data) => {
     //传入一个立即执行函数,函数里面再去执行processDataCallback,再往函数里面再去执行processDataCallback里面传入一个函数
    if (err) {
        console.error('出错了:', err);
        return;
    }
    processDataCallback(data, (err, result) => {
        if (err) {
            console.error('处理出错:', err);
            return;
        }
        console.log('回调地狱结果:', result); //打印结果为: 回调地狱结果: 数据1 -> 处理后
    });
});






// 使用Promise的写法
function getDataPromise() { //创建返回一个promise对象
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            const data = '数据2';
            resolve(data);
        }, 1000);
    });
}

function processDataPromise(data) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            const result = data + ' -> 处理后';
            resolve(result);
        }, 1000);
    });
}

// Promise链式调用，代码更清晰
getDataPromise()
    .then(data => processDataPromise(data))
    .then(result => {
        console.log('Promise结果:', result);
    })
    .catch(err => {
        console.error('Promise出错:', err);
    });

